rendernode: Add can_diff implementation for transform nodes
authorBenjamin Otte <otte@redhat.com>
Wed, 6 Mar 2019 11:39:56 +0000 (12:39 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 6 Mar 2019 11:40:58 +0000 (12:40 +0100)
That one was missing and killing performance in the fishbowl.

gsk/gskrendernodeimpl.c

index 7fa58c4db3b1876198971780c0302766b4c9b9e3..5e7ade0a20a0c450a68017c3623d4ff8f265a55c 100644 (file)
@@ -2427,6 +2427,19 @@ gsk_transform_node_draw (GskRenderNode *node,
   gsk_render_node_draw (self->child, cr);
 }
 
+static gboolean
+gsk_transform_node_can_diff (GskRenderNode *node1,
+                             GskRenderNode *node2)
+{
+  GskTransformNode *self1 = (GskTransformNode *) node1;
+  GskTransformNode *self2 = (GskTransformNode *) node2;
+
+  if (!gsk_transform_equal (self1->transform, self2->transform))
+    return FALSE;
+
+  return gsk_render_node_can_diff (self1->child, self2->child);
+}
+
 static void
 gsk_transform_node_diff (GskRenderNode  *node1,
                          GskRenderNode  *node2,
@@ -2563,7 +2576,7 @@ static const GskRenderNodeClass GSK_TRANSFORM_NODE_CLASS = {
   "GskTransformNode",
   gsk_transform_node_finalize,
   gsk_transform_node_draw,
-  gsk_render_node_can_diff_true,
+  gsk_transform_node_can_diff,
   gsk_transform_node_diff,
   gsk_transform_node_serialize,
   gsk_transform_node_deserialize